
一、指令基础与版本差异。
兄弟们先得搞清楚版本差异,老版本1.12及之前用/testfor指令配合比较器,输出红石信号来检测指定实体是否存在,但只能判断有无无法精确计数,新版本1.13后有了/execute store result score这个神技,配合entitycount选择器就能把实体数量存入计分板,比如/execute store result score #mobCount count run entitycount @e[type=zombie]就把僵尸总数写进虚拟计分板里,注意新版指令对大小写敏感,type参数必须小写且准确,比如zombie不是Zombie,另外选择器里指定距离用distance或者dx dy dz包裹区域都行,老玩家建议在命令方块里先用/help用法测试一下再批量部署。
二、最实用的监测方法。
我常用一套组合拳,先创建一个虚拟计分板如/scoreboard objectives add mobCount dummy,然后用循环命令方块每20游戏刻执行一次/execute store result score #total mobCount run entitycount @e[type=creeper],接着用/tellraw @a ["",{"text":"当前苦力怕数量:",},{"score":{"name":"#total","objective":"mobCount"}}]显示到聊天栏,注意这条指令会刷屏所以建议加个延迟或只在特定条件下触发,另一个技巧是用/bossbar创建血条并绑定分数,比如/bossbar add mobBar 怪物计数,然后/execute store result bossbar minecraft:mobBar value run entitycount @e[type=spider],这样屏幕上方就能实时显示蜘蛛数量而且不刷屏,非常优雅。
三、监测特定区域的生物。
刷怪塔想只统计塔内的怪物就得用坐标范围,比如在塔中心坐标-100 64 -100处建一个10乘10乘10的区域,选择器写成@e[x=-100,y=64,z=-100,dx=10,dy=10,dz=10,type=zombie]注意dx是x轴正方向延伸,实际上dx=10表示从x=-100到-90,新手容易搞反,更稳妥的是用distance=..15以方块为中心半径15格,但要注意圆形范围会漏掉角落,另外跨维度监测必须用/execute in minecraft:overworld run entitycount,否则在末地却要数主世界的猪灵就会报错,服务器里还得限定世界名称。
四、避免卡顿的技巧。
监测指令如果每游戏刻都执行全图实体,服务器直接卡成PPT,我一般只让循环命令方块每10秒运行一次,用红石时钟或者/schedule function延时,比如先创建一个函数每200tick调用一次,更狠的方法是只在玩家接近时才监测,利用@p选择器加distance范围判断,另外避免用@e不加任何限制,尤其是末地折跃门附近大量末影螨会拖垮性能,计分板值也要定期清理,用/scoreboard players reset #total mobCount释放内存,还有命令方块数量别超过几十个,大型服务器建议用数据包代替。
五、利用监测优化农场效率。
我的僵尸猪灵塔就靠这个自动控制,先监测塔内猪灵数量,当超过50只时/execute if entity @e[type=zombified_piglin]如果count大于50使用条件比较器更复杂,实际用/scoreboard players set @e[type=zombified_piglin] temp 1然后统计temp计分板总和,再与预设值比较,简单做法是用链式命令方块:第一个循环命令方块执行/execute if entity @e[type=zombified_piglin,x=...] run say 过多,第二个命令方块接比较器输出高电平激活处死装置如/kill @e[type=zombified_piglin,x=...]但注意别一下全清,可以配合随机或计时器,另外村民交易所监测铁傀儡数量时,需要检测铁傀儡是否在特定范围,然后激活陷阱,这样就不用手动清理了。
六、显示在屏幕上的方法。
聊天栏提示容易刷屏,我喜欢用/title @a actionbar 显示进度条,比如/execute store result score #temp mobCount run entitycount @e[type=skeleton],再/execute if score #temp mobCount matches 1.. run title @a actionbar [{"text":"骷髅数:",},{"score":{"name":"#temp","objective":"mobCount"}}],这样只有数值变化时才刷新,另一个办法是/bossbar,大哥前面说过但补充一点,bossbar可以设置颜色和分段,比如红色代表危险,绿色安全,用/execute store result bossbar minecraft:mobBar value run entitycount @e[type=enderman]后还能用/execute store result bossbar minecraft:mobBar max run entitycount @e[type=enderman]把最大值也动态更新,这样条子长度会随着数量比例变化。
七、特殊生物监测案例。
监测携带武器的僵尸或者有自定义名字的村民就需要NBT了,比如/execute if entity @e[type=zombie,nbt={HandItems:[{id:"minecraft:diamond_sword"}]}] run say 发现持剑僵尸,注意NBT格式里HandItems是数组,老版本用Equipment,另外监测凋灵骷髅是否留下头颅时可以用/execute if entity @e[type=wither_skeleton,nbt={DroppedSkull:1b}],但掉落物不算实体,实际上要监测骷髅头颅掉落物用/entitycount @e[type=item,nbt={Item:{id:"minecraft:wither_skeleton_skull"}}],这个很实用因为刷凋灵骷髅塔需要统计掉落率,还有监测铁傀儡生成时,可以用/execute if entity @e[type=iron_golem,distance=..10]判断附近是否存在,避免重复召唤。
八、多世界与服务器管理。
在服务器里每个维度独立,比如主世界刷怪太多而地狱却空荡,需要为每个世界设置单独的计分板,可以用/execute in minecraft:overworld run entitycount @e[type=creeper]和/execute in minecraft:the_nether run entitycount @e[type=ghast]分别统计,然后显示时加上世界前缀,注意命令方块执行时默认当前世界,所以最好在函数里指定维度,另外权限问题,普通玩家看不到计分板,可以用/team modify @a option nametagVisibility never之类的,或者用私聊/tellraw @p显示,还有遇到实体数量溢出时计分板会归零,建议设置最大值上限,如/scoreboard players set #limit mobCount 1000,然后/execute if score #total mobCount >= #limit mobCount run kill @e[type=creeper]自动清理。
九、实战中的坑与心得。
我刚开始用entitycount时经常把type拼成TyPe导致报错,还有dx dy dz的方向搞反,结果把整个人家的房子都统计进去了,另一个坑是循环命令方块如果设置成保持开启且没有延迟,服务器瞬间崩溃,必须加上红石中继器或者/scoreboard的延时条件,还有注意计分板名称区分大小写,比如mobCount和MobCount是两个不同的,最后别忘了监测指令本身也会占用资源,所以建议只在需要的时候开启,比如用拉杆控制一个命令方块阵列,这样既灵活又稳定,以上就是我多年玩下来的经验,希望能帮到每个在红石路上折腾的玩家。
相关文章